/**
 * @returns {void}
 */
function a() {
  try {
    return console.log("try");
  } catch {
    return console.log("catch");
  } finally {
    //     return (console.log('finally'))
  }
}
// ## 来自eslint的描述
// JavaScript suspends the control flow statements of
// try and catch blocks until the execution of finally block finishes.
// So, when return, throw, break, or continue is used in finally,
// control flow statements inside try and catch are overwritten,
// which is considered as unexpected behavior. Such as:
// ```
// // We expect this function to return 1;
// (() => {
//     try {
//         return 1; // 1 is returned but suspended until finally block ends
//     } catch(err) {
//         return 2;
//     } finally {
//         return 3; // 3 is returned before 1, which we did not expect
//     }
// })();

// // > 3
// ```

// ## 来自MDN
// Immediately before the execution of a control-flow statement
//  (return, throw, break, continue) in the try block or catch block that would exit the block.
// 紧接在 try 块或 catch 块中将退出块的控制流语句（return、throw、break、continue）执行之前

const b = a();
